package cn.exrick.manager.service;

import cn.exrick.common.pojo.DataTablesResult;
import cn.exrick.manager.pojo.TbItem;

import java.util.List;


/**
 * 商品管理
 */
public interface ItemService {

    /**
     * 通过ID获取商品包含详情
     * @param itemId
     * @return
     */
    TbItem getItemById(Long itemId);

    /**
     * 通过ID获取不包含详情
     * @param id
     * @return
     */
    TbItem getNormalItemById(Long id);

    /**
     * 分页搜索排序获取商品列表
     * @param draw
     * @param start
     * @param length
     * @param cid
     * @param search
     * @param orderCol
     * @param orderDir
     * @return
     */
    DataTablesResult getItemList(int draw, int start, int length, int cid,String recommend,
                                 String search,String status,String minDate,String maxDate, String orderCol, String orderDir);

    /**
     * 多条件查询获取商品列表
     * @param draw
     * @param start
     * @param length
     * @param cid
     * @param search
     * @param minDate
     * @param maxDate
     * @param orderCol
     * @param orderDir
     * @return
     */
    DataTablesResult getItemSearchList(int draw,int start,int length,int cid,String recommend,
                                       String search,String status,String minDate,String maxDate,
                                       String orderCol,String orderDir);

    /**
     * 获取商品总数
     * @return
     */
    DataTablesResult getAllItemCount(String status, String minDate, String maxDate);

    /**
     * 修改商品状态
     * @param id
     * @param state
     * @return
     */
    TbItem alertItemState(Long id,Integer state);

    /**
     * 彻底删除商品
     * @param id
     * @return
     */
    int deleteItem(Long id);

    /**
     * 添加商品
     * @param tbItem
     * @return
     */
    TbItem addItem(TbItem tbItem);

    /**
     * 更新商品
     * @param id
     * @param tbItem
     * @return
     */
    TbItem updateItem(Long id,TbItem tbItem);

    /**
     * 推荐商品
     * @param ids
     * @param recommend 1 推荐 ； 0 取消推荐
     */
    void updateRecommendItem(List<Long> ids,int recommend);

    /**
     * 获取库存不足的商品
     * @return
     */
    List<TbItem> getStockNotEnoughItemList();

    /**
     * 判断商品是否有关联的订单
     * @param ids
     * @return
     */
    boolean checkItemHasRelatedOrder(List<Long> ids);
}
